package com.forever.volleydemo;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends Activity {

	ImageView imageView1, imageView2;
	TextView textView1;

	// 测试用的Json-url
	String url = "http://weather.xcyh.org/json";
	// 测试用的图片-url
	String url_pic = "http://www.baidu.com/img/bdlogo.png";

	// 下载任务队列
	RequestQueue mQueue;
	// 图片下载器
	ImageLoader mLoader;

	// 自定义的图片缓存
	public static ImageCacheBitmap mImageCacheBitmap = new ImageCacheBitmap();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView1 = (TextView) findViewById(R.id.textView1);
		imageView1 = (ImageView) findViewById(R.id.imageView1);
		imageView2 = (ImageView) findViewById(R.id.imageView2);

		mQueue = Volley.newRequestQueue(getApplicationContext());
		mLoader = new ImageLoader(mQueue, mImageCacheBitmap);



	}

	public void click(View view) {
		switch (view.getId()) {
		// 跳转到测试缓存页面
		case R.id.button1:
			Intent mIntent = new Intent(this, DiskActivity.class);
			startActivity(mIntent);

			break;

		default:
			break;
		}
	}

	@SuppressWarnings("static-access")
	@Override
	protected void onResume() {
		super.onResume();

		/**
		 *第一个参数为：http请求方法。
		 *第二个参数为：url,请求地址
		 *第三个参数：设置为NULL
		 *第四个参数：请求成功的回调
		 *第五个参数：请求失败的回调
		 */
		JsonObjectRequest mRequest = new JsonObjectRequest(Request.Method.GET,
				url, null, new Listener<JSONObject>() {

					@Override
					public void onResponse(JSONObject response) {
						String info = response.toString();
						textView1.setText(info);

					}
				}, new ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {

					}
				});

		// 不要忘记放入队列中。
		mQueue.add(mRequest);

		// 下载图片，第一种方式。
		mLoader.get(url_pic, new ImageListener() {

			@Override
			public void onErrorResponse(VolleyError error) {

			}

			@Override
			public void onResponse(ImageContainer response, boolean isImmediate) {

				Bitmap mBitmap = response.getBitmap();

				imageView1.setImageBitmap(mBitmap);
			}
		});

		// 下载图片第二种方式(显然这种方式要简洁一些。)
		// 最后两个参数为，设置默认图片和下载失败图片

		mLoader.get(url_pic, mLoader.getImageListener(imageView2,
				R.drawable.ic_launcher, R.drawable.ic_launcher));

		// 下载图片第三种方式这个就不尝试了，看参数就知道具体意思了。可以修改图片的大小
		// mLoader.get(requestUrl, imageListener, maxWidth, maxHeight)

		// 测试是否是单例
		// checkSingle();

		// 2，post 方法

		String user_url = "http://localhost:8080/Forever/wangyong";
		StringRequest requestPost = new StringRequest(Method.POST, user_url,
				new Listener<String>() {

					@Override
					public void onResponse(String response) {

						Toast.makeText(getApplicationContext(), response,
								Toast.LENGTH_SHORT).show();

					}
				}, new ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {

					}
				}) {

			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				Map<String, String> map = new HashMap<String, String>();
				map.put("name", "wy");
				map.put("password", "123456");
				return map;
			}
		};

		mQueue.add(requestPost);
	}

	/**
	 * 检测是否是单例的方法。
	 * 原理：使用20个线程去获得所要对象。然后放入HashSet中。
	 * 最后，打印Set中的元素个数。因为，Set中不允许有重复对象，所以Set元素个数超过1就说明单例失败了。
	 */
	public void checkSingle() {

		final Set<RequestQueue> queueSet = new HashSet<RequestQueue>();
		final Set<ImageLoader> loaderSet = new HashSet<ImageLoader>();
		for (int i = 0; i < 20; i++) {

			new Thread(new Runnable() {

				@Override
				public void run() {
					RequestQueue singleQueue = DownLoadTools.getInstance(
							MainActivity.this).getRequestQueue();
					queueSet.add(singleQueue);
					ImageLoader singleLoader = DownLoadTools.getInstance(
							MainActivity.this).getImageLoader();
					loaderSet.add(singleLoader);
				}
			}).start();

		}

		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		textView1.setText(queueSet.size() + "《------》" + loaderSet.size());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}
